package com.bjtu.ptsite.service;

import java.util.List;

import com.bjtu.ptsite.model.InviteCode;
import com.bjtu.ptsite.model.User;

/**
 *
 * @author Zehao Wang, Junjie Zhang, Yutao Wei
 *
 */
public interface InviteCodeService {
    /**
     * 验证邀请码的有效性。
     *
     * @param code 待验证的邀请码
     * @return 如果邀请码有效且未被使用，返回对应的InviteCode对象；否则返回null
     */
    InviteCode validateInviteCode(String code);
    /**
     * 查找验证码是否存在。
     *
     * @param code 要查找的邀请码
     * @return 如果邀请码存在返回对应的InviteCode对象；否则返回null
     */
    InviteCode getInviteCode(String code);
    /**
     * 使用邀请码。此操作会将邀请码的状态标记为已使用。
     *
     * @param code 要使用的邀请码
     * @return 如果邀请码存在且成功使用，返回true；否则返回false
     */
    boolean useInviteCode(String code);
    /**
     * 创建一个新地邀请码。如果指定的邀请码已存在，可能会抛出异常或返回null，取决于具体实现。
     *
     * @param user 创建邀请码的用户
     * @param code 要创建的邀请码内容
     * @return 创建成功地邀请码对象；如果创建失败，返回null
     * @throws RuntimeException 如果指定的邀请码已存在或创建过程中发生错误
     */
    InviteCode createInviteCode(User user, String code);
    /**
     * 添加一个邀请码，如果不存在则创建；如果已存在则更新或忽略。
     * 与{@link #createInviteCode(User, String)}不同，此方法通常不会因重复而失败。
     *
     * @param user 关联的用户
     * @param code 邀请码内容
     * @return 添加或已存在的邀请码对象
     */
    InviteCode addInviteCode(User user, String code);
    /**
     * 删除指定用户的邀请码。
     *
     * @param user 邀请码所属的用户
     * @param code 要删除的邀请码
     * @return 如果邀请码存在且成功删除，返回true；否则返回false
     */
    boolean deleteInviteCode(User user, String code);
    /**
     * 获取指定用户的所有邀请码列表。
     *
     * @param user 要查询的用户
     * @return 该用户的所有邀请码列表；如果没有邀请码，返回空列表
     */
    List<InviteCode> getCodes(User user);
}
